package com.cqeec.demo.util;

import java.util.Random;
import java.util.UUID;

/**
 * 生成随机数
 * 
 * @Title: RandomUtil
 * @Descripton: 产生随机数
 */
public class RandomUtil {
	
	/**
	 * 生成6位长度的短链接
	 * 
	 * @return 返回6位长度的字符串
	 */
	public static String shortUrl() {
		// 要使用生成 URL 的字符
		String[] chars = new String[] { "a", "b", "c", "d", "e", "f", "g", "h",
                "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t",
                "u", "v", "w", "x", "y", "z", "0", "1", "2", "3", "4", "5",
                "6", "7", "8", "9", "A", "B", "C", "D", "E", "F", "G", "H",
                "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T",
                "U", "V", "W", "X", "Y", "Z" };
		
		// 对传入网址进行 MD5 加密
		String hex = MD5.MD5Encode(getRandomString());
		int i = 0;
		// 把加密字符按照 8 位一组 16 进制与 0x3FFFFFFF 进行位与运算
		String sTempSubString = hex.substring(i * 8, i * 8 + 8);

		// 这里需要使用 long 型来转换，因为 Inteper .parseInt() 只能处理 31 位 ,首位为符号位 ,如果不用long ，则会越界
		long lHexLong = 0x3FFFFFFF & Long.parseLong(sTempSubString, 16);
		String outChars = "";
		
		for (int j = 0; j < 6; j++) {
			// 把得到的值与 0x0000003D 进行位与运算，取得字符数组 chars 索引
			long index = 0x0000003D & lHexLong;
			// 把取得的字符相加
			outChars += chars[(int) index];
			// 每次循环按位右移 5 位
			lHexLong = lHexLong >> 5;
		}

		return outChars;
	}
	
	/**
	 * 生成4位长度的随机整数
	 * 
	 * @return 返回生成的随机整数
	 */
	public static int getRandomNumber(){
		Random random = new Random();
		return random.nextInt(9000)+1000;
	}
	
	/**
	 * 生成32位随机数，可用于防止表单重复提交
	 * @return
	 */
	public static String getRandomString(){
		return UUID.randomUUID().toString().replace("-", "");
	}

}
